package com.ruoyi.system.service.impl;

import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.ruoyi.system.domain.*;
import com.ruoyi.system.mapper.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.system.service.IModuleEngInfoPreviewService;

/**
 * 工程导入预览Service业务层处理
 *
 * @author ruoyi
 * @date 2023-08-01
 */
@Service
public class ModuleEngInfoPreviewServiceImpl implements IModuleEngInfoPreviewService {
    @Autowired
    private ModuleEngInfoPreviewMapper moduleEngInfoPreviewMapper;
    @Autowired
    private ModuleVolumeInfoPreviewMapper moduleVolumeInfoPreviewMapper;
    @Autowired
    private ModuleFileInfoPreviewMapper moduleFileInfoPreviewMapper;
    @Autowired
    private ModuleEngInfoMapper moduleEngInfoMapper;
    @Autowired
    private ModuleVolumeInfoMapper moduleVolumeInfoMapper;
    @Autowired
    private ModuleFileInfoMapper moduleFileInfoMapper;
    @Autowired
    private ModuleEngSerialMapper moduleEngSerialMapper;

    /**
     * 查询工程导入预览
     *
     * @param id 工程导入预览主键
     * @return 工程导入预览
     */
    @Override
    public ModuleEngInfoPreview selectModuleEngInfoPreviewById(String id) {
        return moduleEngInfoPreviewMapper.selectModuleEngInfoPreviewById(id);
    }

    /**
     * 查询工程导入预览列表
     *
     * @param moduleEngInfoPreview 工程导入预览
     * @return 工程导入预览
     */
    @Override
    public List<ModuleEngInfoPreview> selectModuleEngInfoPreviewList(ModuleEngInfoPreview moduleEngInfoPreview) {
        return moduleEngInfoPreviewMapper.selectModuleEngInfoPreviewList(moduleEngInfoPreview);
    }

    /**
     * 新增工程导入预览
     *
     * @param moduleEngInfoPreview 工程导入预览
     * @return 结果
     */
    @Override
    public int insertModuleEngInfoPreview(ModuleEngInfoPreview moduleEngInfoPreview) {
        return moduleEngInfoPreviewMapper.insertModuleEngInfoPreview(moduleEngInfoPreview);
    }

    /**
     * 修改工程导入预览
     *
     * @param moduleEngInfoPreview 工程导入预览
     * @return 结果
     */
    @Override
    public int updateModuleEngInfoPreview(ModuleEngInfoPreview moduleEngInfoPreview) {
        return moduleEngInfoPreviewMapper.updateModuleEngInfoPreview(moduleEngInfoPreview);
    }

    /**
     * 批量删除工程导入预览
     *
     * @param ids 需要删除的工程导入预览主键
     * @return 结果
     */
    @Override
    public int deleteModuleEngInfoPreviewByIds(String[] ids) {
        return moduleEngInfoPreviewMapper.deleteModuleEngInfoPreviewByIds(ids);
    }

    /**
     * 通过审核
     *
     * @param moduleEngInfoPreview 工程导入预览
     * @return 结果
     */
    @Override
    public int approvedEng(ModuleEngInfoPreview moduleEngInfoPreview) {
        ModuleEngInfo moduleEngInfo = moveEng(moduleEngInfoPreview);

        ModuleVolumeInfoPreview moduleVolumeInfoPreview = new ModuleVolumeInfoPreview();
        moduleVolumeInfoPreview.setRegprojid(moduleEngInfo.getId());
        List<ModuleVolumeInfoPreview> moduleVolumeInfoPreviewList = moduleVolumeInfoPreviewMapper
                .selectModuleVolumeInfoPreviewList(moduleVolumeInfoPreview);

        List<ModuleVolumeInfo> moduleVolumeInfoList = moveVolume(moduleVolumeInfoPreviewList);
        for (ModuleVolumeInfo moduleVolumeInfo : moduleVolumeInfoList) {

            moduleVolumeInfoMapper.insertModuleVolumeInfo(moduleVolumeInfo);

            ModuleFileInfoPreview moduleFileInfoPreview = new ModuleFileInfoPreview();
            moduleFileInfoPreview.setVolumeid(moduleVolumeInfo.getId());
            List<ModuleFileInfoPreview> moduleFileInfoPreviewList = moduleFileInfoPreviewMapper
                    .selectModuleFileInfoPreviewList(moduleFileInfoPreview);

            List<ModuleFileInfo> moduleFileInfoList = moveFile(moduleFileInfoPreviewList);
            for (ModuleFileInfo moduleFileInfo : moduleFileInfoList) {
                moduleFileInfoMapper.insertModuleFileInfo(moduleFileInfo);
            }
        }
        this.deleteVolumeFile(moduleEngInfoPreview.getId());

        ModuleEngSerial moduleEngSerial = new ModuleEngSerial();
        moduleEngSerial.setEngNo(moduleEngInfo.getEngno());
        List<ModuleEngSerial> moduleEngSerialList = moduleEngSerialMapper.selectModuleEngSerialList(moduleEngSerial);
        for (ModuleEngSerial moduleEngSerial1 : moduleEngSerialList) {
            moduleEngSerial1.setCompleteFlag(1);
            moduleEngSerialMapper.updateModuleEngSerial(moduleEngSerial1);
        }

        return moduleEngInfoMapper.insertModuleEngInfo(moduleEngInfo);
    }

    /**
     * 复制工程信息
     */
    public ModuleEngInfo moveEng(ModuleEngInfoPreview moduleEngInfoPreview) {
        ModuleEngInfo moduleEngInfo = new ModuleEngInfo();
        moduleEngInfo.setId(moduleEngInfoPreview.getId());
        moduleEngInfo.setEngname(moduleEngInfoPreview.getEngname());
        moduleEngInfo.setEngno(moduleEngInfoPreview.getEngno()); // 工程版编号，不需要了
        moduleEngInfo.setDanganguanno(moduleEngInfoPreview.getDanganguanno());
        moduleEngInfo.setYijiaodanwei(moduleEngInfoPreview.getYijiaodanwei());
        moduleEngInfo.setBianzhidatestart(moduleEngInfoPreview.getBianzhidatestart());
        moduleEngInfo.setBianzhidateend(moduleEngInfoPreview.getBianzhidateend());
        moduleEngInfo.setAllname(moduleEngInfoPreview.getAllname());
        moduleEngInfo.setAnjuanshu(moduleEngInfoPreview.getAnjuanshu());
        moduleEngInfo.setDanganguanname(moduleEngInfoPreview.getDanganguanname());
        moduleEngInfo.setShuzihuadanwei(moduleEngInfoPreview.getShuzihuadanwei());
        moduleEngInfo.setBuildingorg(moduleEngInfoPreview.getBuildingorg());
        moduleEngInfo.setOperationorg(moduleEngInfoPreview.getOperationorg());
        moduleEngInfo.setCheckorg(moduleEngInfoPreview.getCheckorg());
        moduleEngInfo.setDesignorg(moduleEngInfoPreview.getDesignorg());
        moduleEngInfo.setExplorationorg(moduleEngInfoPreview.getExplorationorg());
        moduleEngInfo.setSupervisionorg(moduleEngInfoPreview.getSupervisionorg());
        moduleEngInfo.setCheckIssueno(moduleEngInfoPreview.getCheckIssueno());
        moduleEngInfo.setPlanlicenseno(moduleEngInfoPreview.getPlanlicenseno());
        moduleEngInfo.setLandplanlicenseno(moduleEngInfoPreview.getLandplanlicenseno());
        moduleEngInfo.setLandlicenseno(moduleEngInfoPreview.getLandlicenseno());
        moduleEngInfo.setOperationlicenseno(moduleEngInfoPreview.getOperationlicenseno());
        moduleEngInfo.setStartstation(moduleEngInfoPreview.getStartstation());
        moduleEngInfo.setEndstation(moduleEngInfoPreview.getEndstation());
        moduleEngInfo.setTotallength(moduleEngInfoPreview.getTotallength());
        moduleEngInfo.setProjmanager(moduleEngInfoPreview.getProjmanager());
        moduleEngInfo.setEngInfoYuliu2(moduleEngInfoPreview.getEngInfoYuliu2());
        moduleEngInfo.setEngInfoYuliu1(moduleEngInfoPreview.getEngInfoYuliu1());
        moduleEngInfo.setEngInfoYuliu3(moduleEngInfoPreview.getEngInfoYuliu3());
        moduleEngInfo.setEngInfoYuliu4(moduleEngInfoPreview.getEngInfoYuliu4());
        return moduleEngInfo;
    }

    /**
     * 复制案卷信息
     */
    public List<ModuleVolumeInfo> moveVolume(List<ModuleVolumeInfoPreview> moduleVolumeInfoPreviewList) {
        List<ModuleVolumeInfo> moduleVolumeInfoList = new ArrayList<>();
        for (ModuleVolumeInfoPreview moduleVolumeInfoPreview : moduleVolumeInfoPreviewList) {
            ModuleVolumeInfo moduleVolumeInfo = new ModuleVolumeInfo();
            moduleVolumeInfo.setId(moduleVolumeInfoPreview.getId()); // 所有属性一一对应
            moduleVolumeInfo.setRegprojid(moduleVolumeInfoPreview.getRegprojid());
            moduleVolumeInfo.setVname(moduleVolumeInfoPreview.getVname());
            moduleVolumeInfo.setIndexId(moduleVolumeInfoPreview.getIndexId());
            moduleVolumeInfo.setListno(moduleVolumeInfoPreview.getListno());
            moduleVolumeInfo.setCarrietype(moduleVolumeInfoPreview.getCarrietype());
            moduleVolumeInfo.setAmount(moduleVolumeInfoPreview.getAmount());
            moduleVolumeInfo.setSpec(moduleVolumeInfoPreview.getSpec());
            moduleVolumeInfo.setBuildorganization(moduleVolumeInfoPreview.getBuildorganization());
            moduleVolumeInfo.setSavetime(moduleVolumeInfoPreview.getSavetime());
            moduleVolumeInfo.setSecuritylayer(moduleVolumeInfoPreview.getSecuritylayer());
            moduleVolumeInfo.setFilestart(moduleVolumeInfoPreview.getFilestart());
            moduleVolumeInfo.setFileend(moduleVolumeInfoPreview.getFileend());
            moduleVolumeInfo.setInjectionperson(moduleVolumeInfoPreview.getInjectionperson());
            moduleVolumeInfo.setCheckperson(moduleVolumeInfoPreview.getCheckperson());
            moduleVolumeInfo.setInjectiondate(moduleVolumeInfoPreview.getInjectiondate());
            moduleVolumeInfo.setCheckdate(moduleVolumeInfoPreview.getCheckdate());
            moduleVolumeInfo.setStoreposition(moduleVolumeInfoPreview.getStoreposition());
            moduleVolumeInfo.setAnnotations(moduleVolumeInfoPreview.getAnnotations());
            moduleVolumeInfo.setTopnode(moduleVolumeInfoPreview.getTopnode());
            moduleVolumeInfo.setPath(moduleVolumeInfoPreview.getPath());
            moduleVolumeInfo.setVolumeYuliu1(moduleVolumeInfoPreview.getVolumeYuliu1());
            moduleVolumeInfo.setVolumeYuliu3(moduleVolumeInfoPreview.getVolumeYuliu3());
            moduleVolumeInfo.setVolumeYuliu2(moduleVolumeInfoPreview.getVolumeYuliu2());
            moduleVolumeInfo.setVolumeYuliu4(moduleVolumeInfoPreview.getVolumeYuliu4());
            moduleVolumeInfo.setVolumeno(moduleVolumeInfoPreview.getVolumeno());
            moduleVolumeInfoList.add(moduleVolumeInfo);
        }
        return moduleVolumeInfoList;
    }

    /**
     * 复制文件信息
     */
    public List<ModuleFileInfo> moveFile(List<ModuleFileInfoPreview> moduleFileInfoPreviewList) {
        List<ModuleFileInfo> moduleFileInfoList = new ArrayList<>();
        for (ModuleFileInfoPreview moduleFileInfoPreview : moduleFileInfoPreviewList) {
            ModuleFileInfo moduleFileInfo = new ModuleFileInfo();
            moduleFileInfo.setId(moduleFileInfoPreview.getId()); // 所有属性一一对应
            moduleFileInfo.setVolumeid(moduleFileInfoPreview.getVolumeid());
            moduleFileInfo.setFilename(moduleFileInfoPreview.getFilename());
            moduleFileInfo.setDuty(moduleFileInfoPreview.getDuty());
            moduleFileInfo.setSavetime(moduleFileInfoPreview.getSavetime());
            moduleFileInfo.setFiletime(moduleFileInfoPreview.getFiletime());
            moduleFileInfo.setTagnum(moduleFileInfoPreview.getTagnum());
            moduleFileInfo.setPagenumber(moduleFileInfoPreview.getPagenumber());
            moduleFileInfo.setBuildorganization(moduleFileInfoPreview.getBuildorganization());
            moduleFileInfo.setCarriertype(moduleFileInfoPreview.getCarriertype());
            moduleFileInfo.setPapertype(moduleFileInfoPreview.getPapertype());
            moduleFileInfo.setSecuritylayer(moduleFileInfoPreview.getSecuritylayer()); // 所有属性一一对应
            moduleFileInfo.setComments(moduleFileInfoPreview.getComments());
            moduleFileInfo.setAbstracts(moduleFileInfoPreview.getAbstracts());
            moduleFileInfo.setKeywords(moduleFileInfoPreview.getKeywords());
            moduleFileInfo.setFileReserved1(moduleFileInfoPreview.getFileReserved1());
            moduleFileInfo.setFilepath(moduleFileInfoPreview.getFilepath());
            moduleFileInfo.setEfilenum(moduleFileInfoPreview.getEfilenum());
            moduleFileInfoList.add(moduleFileInfo);

        }
        return moduleFileInfoList;
    }

    /**
     * 审核不通过
     *
     * @param moduleEngInfoPreview1 工程导入预览
     * @return 结果
     */
    public int noPassEng(ModuleEngInfoPreview moduleEngInfoPreview1) {
        String id = moduleEngInfoPreview1.getId();
        ModuleEngInfoPreview moduleEngInfoPreview = moduleEngInfoPreviewMapper.selectModuleEngInfoPreviewById(id);
        File directory = new File(moduleEngInfoPreview.getEngInfoYuliu3());
        this.delete(directory);
        ModuleVolumeInfoPreview moduleVolumeInfoPreview = new ModuleVolumeInfoPreview();
        moduleVolumeInfoPreview.setRegprojid(id);
        List<ModuleVolumeInfoPreview> moduleVolumeInfoPreviewList = moduleVolumeInfoPreviewMapper
                .selectModuleVolumeInfoPreviewList(moduleVolumeInfoPreview);
        for (ModuleVolumeInfoPreview moduleVolumeInfoPreview1 : moduleVolumeInfoPreviewList) {
            ModuleFileInfoPreview moduleFileInfoPreview = new ModuleFileInfoPreview();
            moduleFileInfoPreview.setVolumeid(moduleVolumeInfoPreview1.getId());
            List<ModuleFileInfoPreview> moduleFileInfoPreviewList = moduleFileInfoPreviewMapper
                    .selectModuleFileInfoPreviewList(moduleFileInfoPreview);
            for (ModuleFileInfoPreview moduleFileInfoPreview1 : moduleFileInfoPreviewList) {
                moduleFileInfoPreviewMapper.deleteModuleFileInfoPreviewById(moduleFileInfoPreview1.getId());
            }
            moduleVolumeInfoPreviewMapper.deleteModuleVolumeInfoPreviewById(moduleVolumeInfoPreview1.getId());
        }

        ModuleEngSerial moduleEngSerial = new ModuleEngSerial();
        moduleEngSerial.setEngNo(moduleEngInfoPreview1.getEngno());
        List<ModuleEngSerial> moduleEngSerialList = moduleEngSerialMapper.selectModuleEngSerialList(moduleEngSerial);
        for (ModuleEngSerial moduleEngSerial1 : moduleEngSerialList) {
            moduleEngSerial1.setCompleteFlag(0);
            moduleEngSerialMapper.updateModuleEngSerial(moduleEngSerial1);
        }

        return moduleEngInfoPreviewMapper.deleteModuleEngInfoPreviewById(id);
    }

    /**
     * 删除工程导入预览信息
     *
     * @param id 工程导入预览主键
     * @return 结果
     */
    @Override
    public int deleteModuleEngInfoPreviewById(String id) {
        return moduleEngInfoPreviewMapper.deleteModuleEngInfoPreviewById(id);
    }

    /**
     *
     * 删除数据库中相应的案卷和文件
     *
     */
    public void deleteVolumeFile(String id) {
        ModuleVolumeInfoPreview moduleVolumeInfoPreview = new ModuleVolumeInfoPreview();
        moduleVolumeInfoPreview.setRegprojid(id);
        List<ModuleVolumeInfoPreview> moduleVolumeInfoPreviewList = moduleVolumeInfoPreviewMapper
                .selectModuleVolumeInfoPreviewList(moduleVolumeInfoPreview);
        for (ModuleVolumeInfoPreview moduleVolumeInfoPreview1 : moduleVolumeInfoPreviewList) {
            ModuleFileInfoPreview moduleFileInfoPreview = new ModuleFileInfoPreview();
            moduleFileInfoPreview.setVolumeid(moduleVolumeInfoPreview1.getId());
            List<ModuleFileInfoPreview> moduleFileInfoPreviewList = moduleFileInfoPreviewMapper
                    .selectModuleFileInfoPreviewList(moduleFileInfoPreview);
            for (ModuleFileInfoPreview moduleFileInfoPreview1 : moduleFileInfoPreviewList) {
                moduleFileInfoPreviewMapper.deleteModuleFileInfoPreviewById(moduleFileInfoPreview1.getId());
            }
            moduleVolumeInfoPreviewMapper.deleteModuleVolumeInfoPreviewById(moduleVolumeInfoPreview1.getId());
        }
        moduleEngInfoPreviewMapper.deleteModuleEngInfoPreviewById(id);
    }

    /**
     *
     * 删除文件夹
     *
     */
    public static void delete(File file) {
        if (file.isDirectory()) {
            File[] files = file.listFiles();

            if (files != null) {
                for (File subFile : files) {
                    delete(subFile);
                }
            }
        }
        file.delete();
    }

}
